import { unref, reactive, ref } from 'vue';
import Request from '@/api/request/request';
/**
 * 20220220
 * ljy
 * 用于在模块基本的增删改查功能中，封装了查询表格查询功能供调用。
 * 本函数用于初始化，使用方法（在setup中使用）：
 * 在组件中先导入本模块：import { useTableList } from '@/api/uem/useTableList.ts';
 * 创建对象：
 * const { table,query,loadTableList,clearQuery,changePageSize,changePage } = useTableList(proxy.$urls.API_URL_BACKSTAGE_ADMIN_MANAGE,{},false);
 * @param {string} url 请求地址
 * @param {object} queryForm 搜索表单（目前还没用上该参数，保留）
 * @param {boolean} immediate 是否在初始化时加载，默认: `true`。如果选择false，则要在后面手动执行方法loadTableList()加载表格
 *
 */
export default function useTableList(url, pagination = true, queryForm = {}, immediate = true) {
  const table = reactive({
    data: [],
  });
  if (pagination) { // 如果有分页
    table.page = 1; // 当前页
    table.pageSize = 20; // 每页的最大记录数
    table.total = 0; // 总记录数
    table.hideOnSinglePage = false; // 如果只有一页，则隐藏分页栏，隐藏之后无法再选择恢复（例如改变每页的最大记录数为单页后，无法再修改每页记录数，因为分页栏已经消失）。false为不隐藏，如果不隐藏可以不在分页插件设置该属性。
  }
  const query = ref({}); // 查询条件，用户在查询表单中使用
  // 加载表格数据。
  const loadTableList = async () => {
    query.value = Object.assign(unref(query), {
      page: table.page,
      pageSize: table.pageSize,
    });
    const resData = await new Request(url, query.value).get();
    if (typeof resData.data !== 'string') {
      if (pagination) { // 如果有分页
        table.data = resData.data.data;
        table.total = resData.data.totalRecords;
      } else { // 如果没分页
        table.data = resData.data;
      }
    }
  };
    // 如果初始化选择了立即查询，则直接加载表格数据
  if (immediate) {
    loadTableList().then();
  }
  // 重新刷新表格，让表格变为第一页
  async function refreshList() {
    table.page = 1;
    table.data = [];
    await loadTableList();
  }
  // 当改变每页的最大记录数时，用于配合分页插件使用
  const changePageSize = async (pageSize) => {
    table.pageSize = pageSize;
    await loadTableList();
  };
    // 当改变当前页码时，用于配合分页插件使用
  const changePage = async (page) => {
    table.page = page;
    await loadTableList();
  };
    // 移除某属性或是初始化查询条件。
  const removeQueryField = (field) => {
    const noRemoveFillds = ['page', 'pagesize'];
    if (!noRemoveFillds.includes(field)) { // 分页属性不移除
      delete query.value[field]; // 移除该属性
    }
  };
    // 清空或初始化查询条件，并重新加载表格。
  const clearQuery = () => {
    query.value = {}; // 清空查询条件
    // loadTableList();
  };
  return {
    query,
    table,
    loadTableList,
    refreshList,
    changePageSize,
    changePage,
    removeQueryField,
    clearQuery,
  };
}
// # sourceMappingURL=useTableList.js.map
